/*
 * speed_control.h
 *
 *  Created on: Nov 20, 2024
 *      Author: Vinson
 */

#ifndef SRC_MOTOR_SPEED_CONTROL_H_
#define SRC_MOTOR_SPEED_CONTROL_H_

#include "global_var.h"
#include "mc_debug.h"


/* 电机供电电压 */
#define VDD_VAL                 12.0f
#define U_MOTOR_PP              7					/* 电机极对数 */
#define Sensor_DIR              1					/* 传感器方向 */

enum Direction {
    DIR_CCW      =  1,								/* 逆时针 */
    DIR_CW     = -1, 								/* 顺时针 */
    DIR_UNKNOWN =  0   								/* 未知方向 */
}MC_Dir;

typedef enum
{
	Type_angle,										// 位置控制
	Type_velocity,									// 速度控制
	Type_current,									// 电流控制

	Type_angle_current,								// 角度-电流
	Type_velocity_current,							// 速度电流

	Type_angle_velocity,							// 角度-速度
	Type_angle_velocity_current,					// 角度-速度-电流
	Type_velocity_openloop,							// 电压开环
	Type_angle_openloop								// 角度开环
} MC_Type;

#define TARGET_VEL		150							// RAD/s
#define TARGET_IQ		0.2							// A
#define TARGET_ANGEL	(_2PI * 100)				// 弧度

/* PWM 计数周期 */
#define DRV_PWM                 (4096 - 1)

#define SETA_PHASE_PWM(a)       (__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, lroundf(a * DRV_PWM))) // u, TIM1_CH3: A
#define SETB_PHASE_PWM(b)	    (__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, lroundf(b * DRV_PWM))) // v, TIM1_CH2: B
#define SETC_PHASE_PWM(c)	    (__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, lroundf(c * DRV_PWM))) // w, TIM1_CH1: C


#endif /* SRC_MOTOR_SPEED_CONTROL_H_ */
